<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Symbol应用:
    // 1. 表示独一无二的值   => 消除魔术字符串
    // 2. 对象的属性名现在可以有两种类型，一种是原来就有的字符串，另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型，就都是独一无二的，可以保证不会与其他属性名产生冲突。


    // Math => 数学对象
    // Math.random()
    // Math.round()
    // Math.ceil()
    // Math.floor()
    // Math.min()
    // Math.max()
    // Math.abs()
    // Math.sin()
    // Math.cos()
    // Math.tan()
    // Math.PI

    // 给Math对象定义一个方法(我们自己定义)
    // 字符串作为对象的键名 => 可能会冲突
    // Math.randInt = function (min, max) {
    //     if (!(typeof min == "number" && min % 1 == 0)) {
    //         var err = new Error("Parameter 1 must be an integer!");  //错误对象
    //         throw err;  // 抛出错误之后 当前脚本之后的代码不执行
    //     }
    //     if (!(typeof max == "number" && max % 1 == 0)) {
    //         var err = new Error("Parameter 2 must be an integer!");  //错误对象
    //         throw err;
    //     }

    //     if (min > max) {
    //         var err = new Error("Parameter 1 must be smaller than Parameter 2!");  //错误对象
    //         throw err;
    //     }

    //     return min + Math.round(Math.random() * (max - min));
    // }

    // var result = Math.randInt(1, 100);
    // console.log(result);


    var key = Symbol("randInt");
    Math[key] = function (min, max) {
        if (!(typeof min == "number" && min % 1 == 0)) {
            var err = new Error("Parameter 1 must be an integer!");  //错误对象
            throw err;  // 抛出错误之后 当前脚本之后的代码不执行
        }
        if (!(typeof max == "number" && max % 1 == 0)) {
            var err = new Error("Parameter 2 must be an integer!");  //错误对象
            throw err;
        }

        if (min > max) {
            var err = new Error("Parameter 1 must be smaller than Parameter 2!");  //错误对象
            throw err;
        }

        return min + Math.round(Math.random() * (max - min));
    }

    var result = Math[key](1, 100);
    console.log(result);



    // var zhang = { name: "张三", age: 18, height: "172cm", weight: "70kg" }
    
    // zhang.name; // 快捷取值 -> js引擎解析.后的内容作为对象键名 zhang["name"]

    // var key = "name";
    // // zhang.key; // zhang["key"]
    // zhang[key]; //zhang["name"]


    // for (var key in zhang) {
    //     console.log(key); // "name" "age"
    //     console.log(zhang[key]); // zhang["name"] zhang["age"]
    // }




</script>

</html>